1
Quản lý Sự Phát triển của Container: Kích thước so với Dung lượng
AI037Lesson 14
00:00

Trong C++, việc quản lý sự phát triển của container là một điệu nhảy kiến trúc giữa Kích thước (các phần tử hiện tại) và Dung lượng (bộ nhớ được cấp phát trước). Đối với các container liên tục như vectorstring, khi đạt đến dung lượng sẽ kích hoạt một thao tác tái phân bổ: hệ thống tìm kiếm một khối bộ nhớ lớn hơn, di chuyển tất cả các phần tử và hủy bỏ khối cũ. Đây là một thao tác tốn kém $O(n)$ gây ra việc vô hiệu hóa con trỏ duyệt (iterator)—các con trỏ của bạn tới các phần tử cũ trở thành "treo lơ lửng" và nguy hiểm.

1. Chiến lược Mở rộng

Để tránh việc tái phân bổ thường xuyên, vector các triển khai cấp phát không gian "bộ đệm". Lệnh c.reserve(n) xác định rõ ràng một dung lượng tối thiểu mà không thêm phần tử nào, trong khi c.shrink_to_fit() là một yêu cầu không bắt buộc để trả lại bộ nhớ thừa cho hệ điều hành.

2. Sự khác biệt giữa Resize và Reserve

Trong khi reserve chỉ ảnh hưởng đến bộ đệm, resize(n) thì tích cực thay đổi logic của container. Việc thu nhỏ thông qua resize sẽ xóa các phần tử, trong khi mở rộng sẽ thêm các giá trị được khởi tạo mặc định.

Kích thước (Đã sử dụng)Dung lượng ThêmTổng Dung lượng
⚠️ CẢNH BÁO: Nếu resize thu nhỏ container, các con trỏ duyệt tới các phần tử bị xóa sẽ bị vô hiệu hóa. Nếu mở rộng gây ra tái phân bổ, TẤT CẢ tất cả các con trỏ duyệt đều bị vô hiệu hóa.
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>